package com.xunfang;

import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 *  springboot的自动装配原理:
 *    1、加载 spring.factories 文件
 *       1.1  @SpringBootApplication 是复合注解类
 *                    SpringBootConfiguration      配置类
 *                    ComponentScan                扫描类
 *                    EnableAutoConfiguration      自动装配类
 *       1.2  @EnableAutoConfiguration 注解中   @Import(AutoConfigurationImportSelector.class)
 *            把自动装配的类添加到ioc容器中、
 *       1.3  AutoConfigurationImportSelector 会 去加载 spring.factories 文件
 *       1.4  spring.factories 有很多自动装配的类
 *                 RedisAutoConfiguration       redis自动装配的类
 *                 WebMvcAutoConfiguration      mvc自动装配的类
 *                 DispatcherServletAutoConfiguration 自动装配的类
 *
 *        添加一个第三方的依赖的时候\这个依赖中会有 自动装配的依赖、这个依赖中也会有 spring.factories 文件
 *                加载    MybatisAutoConfiguration
 *
 *    2、初始化自动装配的类    抽象
 *         1、会加载  DataSourceAutoConfiguration、MybatisProperties
 *                   读取配置、加载初始化的数据
 *         2、初始化 SqlSessionFactoryBean、SqlSessionFactory
 *                   SqlSessionFactory
 *         3、创建SqlSession 添加到IOC容器中
 */
@MapperScan("com.xunfang.mapper")
@EnableKnife4j   //开启 在线接口文档
@SpringBootApplication
public class Demo11SpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(Demo11SpringbootApplication.class, args);
    }

}
